package javachongkao.面向对象上.两点成线;

import java.util.Scanner;
//7-44 两点成线
//都说两点确定一条直线，那么设计一个直线类Line，需要通过两个点Point对象来确定。Line类具体要求如下：
//
//1)定义两个Point对象p1，p2；
//
//2)写出有参构造方法，传递两个对象值给p1，p2
//
//3）为p1，p2写出setters，和getters方法
//
//4）为Line写出一个getLength方法求直线中两点的长度
//
//5) 为LIne写一个ToString方法，方法如下所示：
//
//public String toString() {
//        return "Line [p1=" + p1 + ", p2=" + p2 + "]";
//    }
//
//在Main类的main方法中，定义一个Line数组，数组长度通过键盘给出，然后通过键盘为每线段的两个Point对象的坐标赋值，并生成相应Line对象放入数组中，循环数组，输出每条直线的信息，以及两个点之间的距离。
//
//Point 类如下所示：
//
//public class Point {
//    private int x, y;// x,y为点的坐标
//    //求两点之间的距离
//    public double distance(Point p1) {
//        return Math.sqrt((p1.x -this.x)*(p1.x -this.x)+(p1.y-this.y)*(p1.y-this.y));
//    }
//    public Point(int x, int y) {
//        super();
//        this.x = x;
//        this.y = y;
//    }
//    public int getX() {
//        return x;
//    }
//    public void setX(int x) {
//        this.x = x;
//    }
//    public int getY() {
//        return y;
//    }
//    public void setY(int y) {
//        this.y = y;
//    }
//    public Point() {
//        super();
//        x = y =0;
//    }
//    @Override
//    public String toString() {
//        return "Point [x=" + x + ", y=" + y + "]";
//    }
//}
//输入格式:
//第一行输入数组的长度n
//每一行输入一个Line对象的两个点对象的 x y的坐标，中间用空格隔开
//
//输出格式:
//循环输出，输出直线的信息，以及每条直线的两个点的距离，保留一位小数。
class Point {
    private int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Point() {
        this(0, 0);
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public double distance(Point p) {
        return Math.sqrt(Math.pow(p.x - this.x, 2) + Math.pow(p.y - this.y, 2));
    }

    @Override
    public String toString() {
        return "Point [x=" + x + ", y=" + y + "]";
    }
}

class Line {
    private Point p1;
    private Point p2;

    public Line(Point p1, Point p2) {
        this.p1 = p1;
        this.p2 = p2;
    }

    public Point getP1() {
        return p1;
    }

    public void setP1(Point p1) {
        this.p1 = p1;
    }

    public Point getP2() {
        return p2;
    }

    public void setP2(Point p2) {
        this.p2 = p2;
    }

    public double getLength() {
        return p1.distance(p2);
    }

    @Override
    public String toString() {
        return "Line [p1=" + p1 + ", p2=" + p2 + "]";
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        Line[] lines = new Line[n];

        for (int i = 0; i < n; i++) {
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();
            int x2 = scanner.nextInt();
            int y2 = scanner.nextInt();

            Point p1 = new Point(x1, y1);
            Point p2 = new Point(x2, y2);
            lines[i] = new Line(p1, p2);
        }

        for (Line line : lines) {
            System.out.println(line.toString());
            System.out.printf("此线段的长度为：%.1f\n", line.getLength());
        }

        scanner.close();
    }
}